/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;


import com.persistencia.domain.*;
import com.service.*;
import com.service.impl.PerfilServiceImpl;
import com.service.impl.PerfilxOpcionMenuServiceImpl;
import com.service.impl.PersonaServiceImpl;
import com.service.impl.PersonaxPerfilServiceImpl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;


@ManagedBean(name="loginController")
@SessionScoped
public class LoginController implements Serializable{
    
    //Usuario usuario;
    private String mensaje="";
    private String verifica;
    
    PersonaService personaService;
    PerfilxOpcionMenuService perfilxOpcionMenuService;
    PersonaxPerfilService personaxPerfilService;
    List<Perfilxopcionmenu> listaopcionesxperfil;
    List<Opcionmenu> listaopciones;
    
            
    Persona user;
    Persona usuario;
    Personaxperfil personaxperfil;
    List<Personaxperfil> listapersonaxperfil;
    
    PersonaxperfilPK  personaxperfilPK;
    public LoginController() {
        
            personaService = new PersonaServiceImpl();
            perfilxOpcionMenuService = new PerfilxOpcionMenuServiceImpl();
            personaxPerfilService = new PersonaxPerfilServiceImpl();
            personaxperfil = new Personaxperfil();
            listaopcionesxperfil = new ArrayList<Perfilxopcionmenu>();
            personaxperfilPK = new PersonaxperfilPK();
            listapersonaxperfil = new ArrayList<Personaxperfil>();
            listaopciones = new ArrayList<Opcionmenu>();        
            
            user = new Persona();
            usuario = new Persona();
        
        
        
    }
    
    
    
    
    public String login (){
        
        usuario = personaService.obtenerUsuario(user.getVLogin());
        
        
        //usuario = usuarioDAO.obtenerUsuario(user.getVLogin());
        
        if (usuario != null){
            if(usuario.getVPassword().equals(user.getVPassword())){
                try {
                    listaopciones.clear();
                    
                    System.out.println("Persona Id:"+usuario.getNPrsId());
                    //personaxperfilPK.setPrsId(usuario.getNPrsId());
                    //personaxperfil = personaxPerfilService.obtenerPersonaxPerfilPorId(usuario.getNPrsId());
                    listapersonaxperfil = personaxPerfilService.obtenerPersonaxPerfilxIdPersona(usuario.getNPrsId());
                    
                    System.out.println("Descripcion personaxperfil perfil: "+listapersonaxperfil.get(0).getPerfil().getVDescripcion());
                    System.out.println("Descripcion personaxperfil persona: "+listapersonaxperfil.get(0).getPersona().getVNombre());
                    listaopcionesxperfil = perfilxOpcionMenuService.obtenerOpcionMenuxIdPerfil(listapersonaxperfil.get(0).getPerfil().getNPrfId());
                    
                    for(int i=0; i<listaopcionesxperfil.size(); i++){
                        listaopciones.add(listaopcionesxperfil.get(i).getOpcionmenu());
                        System.out.println("Opciones:"+listaopcionesxperfil.get(i).getOpcionmenu().getVNombre() +"VUrl: " + listaopcionesxperfil.get(i).getOpcionmenu().getVUrl()+ " Estado:"+listaopcionesxperfil.get(i).getOpcionmenu().getVEstado() );
                    }
                    
                    for(int i=0; i<listaopciones.size(); i++){
                        
                        System.out.println("Opciones NPadre:"+listaopciones.get(i).getNPadreId() +"Estado:"+listaopciones.get(i).getVEstado());
                    }
                    session(usuario);
                    //perfilxOpcionMenuService.
                }
                 catch (Exception ex) {
                    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
                }
               return "GenerarHorario.xhtml";
            }else{
                return null;
            }
            
            
            
            
            /*if(usuario.getContrasenia().equals(user.getContrasenia())){
                session(usuario);// inicia una session
                System.out.println("Usuario encontrado: " + usuario.getNombre());
                opcionesUsuario = opcionesUsuarioDAO.obtenerOpcionesUsuario(usuario.getId_usuario());
                verifica = "true";
                return "index.xhtml?faces-redirect=true";
            }*/
        }
        System.out.println("Usuario no encontrado: " + usuario);
        return "login.xhtml?faces-redirect=true";
        
        /*if(usuario.getUsuario().equals("admin") && usuario.getPassword().equals("admin")){
            //return "pages/cambiarconfiguracion.xhtml?faces-redirect=true";
            return "GenerarHorario.xhtml";
            //return "home";
            }else{
                mensaje="Usuario o contrasena incorrecta";
                return null;
        }*/
    }
    
    
    public String logout(){
        FacesContext context = FacesContext.getCurrentInstance();
        ExternalContext ec = context.getExternalContext();
        final HttpServletRequest request = (HttpServletRequest) ec.getRequest();
        request.getSession(false).invalidate();
        verifica = null;
        //return "login?faces-redirect=true";
        return "login.xhtml";
    }
   
    private void session(Persona user){
        Persona u = (Persona)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", user);
        System.out.println("Session: " + (Persona)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario"));
    }
    
    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public Persona getUser() {
        return user;
    }

    public void setUser(Persona user) {
        this.user = user;
    }

    public List<Opcionmenu> getListaopciones() {
        return listaopciones;
    }

    public void setListaopciones(List<Opcionmenu> listaopciones) {
        this.listaopciones = listaopciones;
    }

    public List<Perfilxopcionmenu> getListaopcionesxperfil() {
        return listaopcionesxperfil;
    }

    public void setListaopcionesxperfil(List<Perfilxopcionmenu> listaopcionesxperfil) {
        this.listaopcionesxperfil = listaopcionesxperfil;
    }

    public String getVerifica() {
        return verifica;
    }

    public void setVerifica(String verifica) {
        this.verifica = verifica;
    }

    
    

}
